home *** CD-ROM | disk | FTP | other *** search
/ The Atari Compendium / The Atari Compendium (Toad Computers) (1994).iso / files / prgtools / mint / utilit~1 / akputil7.zoo / chmod.c next >
Encoding:
C/C++ Source or Header  |  1990-11-16  |  1.7 KB  |  87 lines

  1. #include <minimal.h>
  2. #include <osbind.h>
  3. #include <string.h>
  4.  
  5. #define TRUE 1
  6. #define FALSE 0
  7.  
  8. extern char *syserr(long);
  9.  
  10. int
  11. do_chmod(name,setbits,clrbits)
  12. char *name;
  13. int setbits;
  14. int clrbits;
  15. {
  16.     char *e;
  17.     long err;
  18.     int oldattr, newattr;
  19.  
  20.     oldattr = err = Fattrib(name,0,0);
  21.     if (err < 0) goto error;
  22.     newattr = (oldattr & ~clrbits) | setbits;
  23.     err = Fattrib(name,1,newattr);
  24.     if (err < 0) {
  25. error:
  26.         e = syserr(err);
  27. error1:
  28.         (void)Fwrite(2,(long)strlen(name),name);
  29.         (void)Fwrite(2,2L,": ");
  30.         (void)Fwrite(2,(long)strlen(e),e);
  31.         (void)Fwrite(2,2L,"\r\n");
  32.         return 1;
  33.     }
  34.     return 0;
  35. }
  36.  
  37. int
  38. main(argc,argv)
  39. int argc;
  40. char *argv[];
  41. {
  42.     int e;
  43.     int bits, setbits, clrbits;
  44.     char *p;
  45.  
  46.     --argc, ++argv;
  47.     setbits = clrbits = 0;
  48.     while (**argv == '+' || **argv == '-') {
  49.     bits = 0;
  50.     p = &argv[0][1];
  51.     while (*p) {
  52.         switch(*p) {
  53.         /* FA_CHANGED is called FA_ARCHIVE by some libraries */
  54.         case 'a': bits |= FA_CHANGED; break;
  55.         case 'h': bits |= FA_HIDDEN; break;
  56.         case 's': bits |= FA_SYSTEM; break;
  57.         case 'w': bits |= FA_RDONLY; break;
  58.         default: goto usage;
  59.         }
  60.         p++;
  61.     }
  62.     if (**argv == '+') {
  63.         setbits |= (bits & ~FA_RDONLY);
  64.         if (bits & FA_RDONLY) clrbits |= FA_RDONLY;
  65.     }
  66.     else {
  67.         clrbits |= (bits & ~FA_RDONLY);
  68.         if (bits & FA_RDONLY) setbits |= FA_RDONLY;
  69.     }
  70.     argc--, argv++;
  71.     }
  72.         
  73.     if (!argc) {
  74. usage:
  75.     (void)Fwrite(2,40L,"Usage: chmod [+ahsw] [-ahsw] names ...\r\n");
  76.     (void)Fwrite(2,42L,"'a'rchive, 'h'idden, 's'ystem 'w'ritable\r\n");
  77.     Pterm(1);
  78.     }
  79.  
  80.     e = 0;
  81.     while (argc) {
  82.     e |= do_chmod(*argv,setbits,clrbits);
  83.     argv++, argc--;
  84.     }
  85.     return e;
  86. }
  87.